#include <iostream>
#include <iomanip>
#include "../kisebo/Controlador.h"

using namespace std;

/*!
 * \brief Construtor
 * Inicia variaveis de uso geral
 * Chama os metodos para preencher as estruturas
 */
Controlador::Controlador()
{
	DirDados = "../dados/";
	BancoLivros = new BDLivro();
	CarregaLogins();
}

/*!
 * \brief Destrutor
 */
Controlador::~Controlador()
{
	delete BancoLivros;
}

/*!
 * \brief Carrega os usuarios
 * Metodo que carrega os usuarios do arquivo ../dados/logins.txt na estrutura Usuarios
 */
void Controlador::CarregaLogins()
{
	cout << endl << "\t\t\t\tCarregaLogins()";
	cout << endl << "\t\t\t\tLogins nao foram carregados" << endl ;
}


/*!
* \brief  Verifica o login
 * Metodo que verifica se o usuario que se logou(logado) e valido
 * \param login e senha do usuario
 * \return Usuario (se existir)
*/
Usuario Controlador::CheckLogin(string login, string senha)
{
	cout << endl << "\t\t\t\tCheckLogin()";
	cout << endl << "\t\t\t\tUsuario nao autenticado" << endl ;
	return UsuarioCorrente;
}

/*!
 * \brief Traz o proximo ID
 * Metodo que procura o proximo ID na estrututa de livros carregada
 * \param
 * \return proximo ID
*/

long Controlador::GetProximoLivroID()
{
	cout << endl << "\t\t\t\tGetProximoLivroID()" << endl ;
	return 0;
}

/*!
 * \brief Cadastra novo livro
 * Metodo que cadastra um novo livro na estrutura de livros
 * \param novo Livro
 * \return
 */
void Controlador::AdicionaLivro(Livro novo_livro)
{
	long aux;
	cout << endl << "\t\t\t\tAdicionaLivro()" << endl ;
	BancoLivros->Adiciona(aux,novo_livro);
	BancoLivros->SalvaLivros();
}

/*!
 * \brief Seleciona Livro
 * Metodo que seleciona livro pro ID
 * \param ID do livro para pesquisa
 * \return Livro selecionado
 */
Livro Controlador::SelecionaLivro(long id)
{
	Livro livro;
	cout << endl << "\t\t\t\tSelecionaLivro()" << endl ;
	return livro;
}

/*!
 * \brief Atualiza interesse do cliente
 * Metodo que devera verificar os interesses do usuario e adicionar o livro a essa lista de interesses se o usuario o tiver
 * \param
 * \return
 */
void  Controlador::AtualizaInteresse()
{
	/*Usuario usu1ario;
	Interesse interesse;
	for(Usuarios.Primeiro( ); ! Usuarios.Fim( );Usuarios.Proximo( ))
	{
	          usuario = Usuarios.GetItem( );
	          for(usuario.Interesses.Primeiro( ); ! usuario.Interesses.Fim( );usuario.Interesses.Proximo( ))
	          {
	               interesse = usuario.Interesses.GetItem( );
	               if(interesse.Tipo == 1 && interesse.valor == livro.GetTema())
	               {
	                     usuario.AdicionaLivro(livro);
	               }
	               else if {
	          }
	          }
	}
*/
}

void Controlador::AtualizaLivrosVendidos(CarrinhoCompra cc)
{
	cout << endl << "\t\t\t\tAtualizaLivrosVendidos()" << endl ;
}

void Controlador::RegistraVenda(CarrinhoCompra cc)
{
	cout << endl << "\t\t\t\tRegistraVenda()" << endl ;
}

// Caso de Uso 4
Logrador Controlador::PesquisaCEP(string cep)
{
	Logrador rua;
	cout << endl << "\t\t\t\tPesquisaCEP()" << endl ;
	return rua;
}

void Controlador::AtualizaCliente(Usuario cliente)
{
	cout << endl << "\t\t\t\tAtualizaCliente()" << endl ;
}

void Controlador::RegistraUsuario(Usuario usuario)
{
	cout << endl << "\t\t\t\tRegistraUsuario()" << endl ;
}

void Controlador::CarregaLogradores()
{
	cout << endl << "\t\t\t\tCarregaLogradores()" << endl ;
}

// Caso de Uso 5, 6 e 7
Usuario Controlador::GetUsuario()
{
	return UsuarioCorrente;
}

void Controlador::MontaPesquisa(int tipo_interesse)
{
	cout << endl << "\t\t\t\tMontaPesquisa()" << endl ;
	CarregaLogradores();
}

vector<Livro> Controlador::PesquisaInteresses(string valor)
{
	vector<Livro> resultado;
	cout << endl << "\t\t\t\tPesquisaInteresses()" << endl ;
	return resultado;
}

